package com.cougil.uoc.seghismed.webservice;

import java.util.List;

import javax.jws.WebService;

import com.cougil.uoc.seghismed.model.ciphed.HistorialCiphed;
import com.cougil.uoc.seghismed.model.ciphed.MetgeCiphed;
import com.cougil.uoc.seghismed.model.ciphed.PacientCiphed;
import com.cougil.uoc.seghismed.model.ciphed.VisitaCiphed;

/**
 * Interfície del servei web que conté la signatura dels métodes oferts/consumits per l'aplicatiu
 * Metge
 * 
 * @author Ignacio Cougil Jares
 * 
 */
@WebService
public interface MetgeWebService extends CoreWebService {

	/**
	 * Afegeix la visita informada com una nova per al pacient facilitat, xifrada i signada només
	 * per al metge informat (sempre que el pacient sigui un dels que té assignats el metge)
	 *
	 * @param metge
	 *            {@link MetgeCiphed} que intenta crear la visita
	 * @param pacient
	 *            {@link PacientCiphed} xifrat al que es vol crear la visita
	 * @param visita
	 *            {@link VisitaCiphed} xifrada omplerta i preparada per ser emmagatzemada
	 */
	public void afegirVisita(MetgeCiphed metge, PacientCiphed pacient, VisitaCiphed visita);

	/**
	 * Retorna l'historial carregat i xifrat del pacient informat per al metge informat
	 *
	 * @param metge
	 *            {@link MetgeCiphed} xifrat pel qual es vol signar la informació de l'historial
	 * @param pacient
	 *            {@link PacientCiphed} xifrat pel qual es vol obtenir el seu historial
	 * @return historial xifrat {@link HistorialCiphed} només per al metge informat
	 */
	public HistorialCiphed consultarHistorial(MetgeCiphed metge, PacientCiphed pacient);

	/**
	 * Retorna el metge xifrat amb totes les seves dades carregades
	 *
	 * @param metge
	 *            {@link MetgeCiphed} xifrat que es vol consultar
	 * @return metge xifrat {@link HistorialCiphed} només per al metge informat
	 */
	public MetgeCiphed consultarMetge(MetgeCiphed metge);

	/**
	 * Retorna la informació carregada del pacient informat (sempre que aquest formi part d'un dels
	 * seus pacients associats) xifrat per al metge informat
	 *
	 * @param metge
	 *            {@link MetgeCiphed} xifrat pel que es vol consultar i xifrar la informació del
	 *            pacient
	 * @param pacient
	 *            {@link PacientCiphed} xifrat del que es vol consultar les seves dades
	 * @return pacient xifrat {@link PacientCiphed} per al metge informat
	 */
	public PacientCiphed consultarPacient(MetgeCiphed metge, PacientCiphed pacient);

	/**
	 * Retorna el conjunt de pacients xifrats associats al metge xifrat informat
	 *
	 * @param metge
	 *            {@link MetgeCiphed} xifrat pel que es vol consultar el conjunt de pacients que té
	 *            associats
	 * @return llista {@link List} dels pacients associats al metge
	 */
	public List<PacientCiphed> consultarPacients(MetgeCiphed metge);

	/**
	 * Retorna la visita del pacient amb totes les seves dades carregades, xifrada i signada només
	 * per al metge informat (sempre que aquesta formi part del pacient informat i sigui una de les
	 * visites dels pacients que té assignats el metge)
	 *
	 * @param metge
	 *            {@link MetgeCiphed} xifrat pel qual es vol xifrar les dades de la visita informada
	 * @param pacient
	 *            {@link PacientCiphed} xifrat del que suposadament és la visita
	 * @param visita
	 *            {@link VisitaCiphed} xifrada les dades de la qual es vol consultar
	 * @return visita xifrada i signada només per al metge referit
	 */
	public VisitaCiphed consultarVisita(MetgeCiphed metge, PacientCiphed pacient, VisitaCiphed visita);
}
